package com.dingding.manager.modules.system.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.dingding.manager.common.beans.sys.SysMenu;
import com.dingding.manager.common.dao.Db;
import com.dingding.manager.common.vo.MenuNode;
import com.dingding.manager.core.util.SqlUtil;
import com.dingding.manager.modules.system.service.IResourceService;
import com.dingding.manager.modules.system.sql.MenuSQL;

/**
 * @Description 资源相关的服务
 * @author fengshuonan
 * @date 2016年12月6日 上午11:39:09
 */
@Service("resourceService")
@Transactional(readOnly = true)
public class ResourceServiceImpl implements IResourceService {

	/**
	 * @Description 根据用户的资源集合获取菜单的列表
	 * @param roles 用户的角色集合
	 * @author fengshuonan
	 */
	@Override
	public MenuNode getMenuNode(List<Integer> roles) {
		
		StringBuilder sb = new StringBuilder();
		sb.append("SELECT * FROM dd_sys_menu m ");
		sb.append("WHERE isShow = 1 AND m.sysMenuId IN ( ");
		sb.append("	SELECT rm.sysMenuId	FROM dd_sys_role_menu rm WHERE rm.sysRoleId in (" + SqlUtil.parse(roles) + ")");
		sb.append(")");

		// 根据角色查询权限列表
		List<SysMenu> list = Db.querySqlList(SysMenu.class, sb.toString(), roles.toArray());

		// 所有权限列表封装到一个节点集合
		List<MenuNode> menuNodes = new ArrayList<MenuNode>();
		for (SysMenu sysMenu : list) {
			MenuNode menuNode = new MenuNode();
			menuNode.setId(sysMenu.getSysMenuId());
			menuNode.setParentId(sysMenu.getParentId());
			menuNode.setName(sysMenu.getMenuName());
			menuNode.setUrl(sysMenu.getHref());
			menuNode.setIcon(sysMenu.getIcon());
			menuNodes.add(menuNode);
		}

		// 根节点
		MenuNode root = MenuNode.createRoot();

		// 构建菜单树
		new MenuNode().buildNodeTree(menuNodes);

		// 只留下目录树的一级菜单
		List<MenuNode> newArray = new ArrayList<MenuNode>();
		for (MenuNode node : menuNodes) {
			if (node.getParentId() == 0) {
				newArray.add(node);
			}
		}

		root.setChildren(newArray);
		
		return root;
	}
	
	
	/**
	 * @Description: 获取所有资源集合（角色授权菜单tree）
	 * @date 2016年12月16日 下午4:17:27
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	public List<SysMenu> getMenuList(){
		return Db.querySqlList(SysMenu.class, MenuSQL.QUERY_MENULIST);
	}
	
	
	
}
